Option Explicit

'################################################################
' Field
'################################################################
' 当前列的封装
' 可能是一个函数/字符串/数字/普通的字段
Private item As IExpression

' 当前列的别名
Private itemAlias As String

'################################################################
' Constructor
'################################################################
Private Sub Class_Initialize()
End Sub

Private Sub Class_Terminate()
End Sub

'################################################################
' Init
'################################################################
' @param itemVal 指定列的封装对象
' @optional-param itemAliasVal 指定列的别名
Public Sub Init(ByRef itemVal As IExpression, Optional ByRef itemAliasVal As String = "")
    ' 指定列的封装对象
    Set item = itemVal

    ' 当前列的别名
    If itemAliasVal = "" Then
        ' 如果没有提供别名，并且 itemVal 是 SqlColumnDefine, 则直接使用列名
        If TypeOf item Is SqlColumnDefine Then
            Dim col As SqlColumnDefine
            Set col = item
            itemAlias = col.ColumnName
        Else
            ' 其他情况，暂时不提供别名
            ' TODO
        End If
    Else
        itemAlias = itemAliasVal
    End If
End Sub

'################################################################
' Property
'################################################################
Public Property Get ItemExpression() As IExpression
    Set ItemExpression = item
End Property

Public Property Get Alias() As String
    Alias = itemAlias
End Property